package com.krim;

import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Collections;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import weibo4j.Weibo;
import weibo4j.WeiboException;

public class CheckSinaServlet extends HttpServlet{

	private static boolean RUNNING;

	private static final int USER_MAX = 5;

	private static String G_PWD = "abc123";

	private static int USER_REC = 0;

	private static Set<String> ERR_USER = Collections.synchronizedSet(new HashSet<String>());

	private static Set<String> ERR_HOST = Collections.synchronizedSet(new HashSet<String>());

	private static List<String> ALL_USER = new LinkedList<String>();

	private static List<String> ALL_HOST = new LinkedList<String>();

	static {
		ALL_USER.add("b3cb5tt@sina.com");
		ALL_USER.add("oz1d5r4@sina.com");
		ALL_USER.add("nu1js25@sina.com");
		ALL_USER.add("t1soy55@sina.com");
		ALL_USER.add("jo00652@sina.com");
		ALL_USER.add("br92ylt@sina.com");
		ALL_USER.add("ss1r02a@sina.com");
		ALL_USER.add("e850909@sina.com");
		ALL_USER.add("i26vw4o@sina.com");
		ALL_USER.add("p2ko610@sina.com");

		ALL_USER.add("z27d9t8@sina.com");
		ALL_USER.add("unos892@sina.com");
		ALL_USER.add("zrez158@sina.com");
		ALL_USER.add("ywqao13@sina.com");
		ALL_USER.add("ycq34vs@sina.com");
		ALL_USER.add("g44889x@sina.com");
		ALL_USER.add("z79nz7d@sina.com");
		ALL_USER.add("yb38df8@sina.com");
		ALL_USER.add("qt1t49s@sina.com");
		ALL_USER.add("h32dl7y@sina.com");

		// ALL_USER.add("wx7d26d@sina.com");
		// ALL_USER.add("qle700j@sina.com");
		// ALL_USER.add("l684b0h@sina.com");
		// ALL_USER.add("e58708f@sina.com");
		// ALL_USER.add("a8lr050@sina.com");
		// ALL_USER.add("w52s676@sina.com");
		// ALL_USER.add("d8ou726@sina.com");
		// ALL_USER.add("p89m626@sina.com");
		// ALL_USER.add("k505018@sina.com");

		// 主帐号
		// ALL_USER.add("fm5tmtb@sina.com");
		// ALL_USER.add("e013bk6@sina.com");
		// ALL_USER.add("tqmx3g3@sina.com");

		ALL_HOST.add("http://za00035.u01.netjsp.com");
		ALL_HOST.add("http://a20202200.ip6.jspcn.net");
		// ALL_HOST.add("http://web073977.host22.chinajsp.net");
	}

	private Weibo getWeibo(String userId, String password){
		Weibo res = new Weibo();
		res.setUserId(userId);
		res.setPassword(password);
		return res;

	}

	@Override
	public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{
		String t = req.getParameter("t");
		if ("show".equalsIgnoreCase(t)) {
			resp.getWriter().write(ERR_USER.toString());
			resp.getWriter().write("<br/>");
			resp.getWriter().write(ERR_HOST.toString());
		} else if ("clear".equalsIgnoreCase(t)) {
			ERR_USER.clear();
			ERR_HOST.clear();
			resp.getWriter().write("clear ok");
		} else if ("addUser".equalsIgnoreCase(t)) {
			ALL_USER.add(req.getParameter("t2"));
			resp.getWriter().write("addUser ok");
		} else if ("removeUser".equalsIgnoreCase(t)) {
			ALL_USER.remove(req.getParameter("t2"));
			resp.getWriter().write("removeUser ok");
		} else if ("addHost".equalsIgnoreCase(t)) {
			ALL_HOST.add(req.getParameter("t2"));
			resp.getWriter().write("addHost ok");
		} else if ("removeHost".equalsIgnoreCase(t)) {
			ALL_HOST.remove(req.getParameter("t2"));
			resp.getWriter().write("removeHost ok");
		} else {
			if (RUNNING) {
				return;
			}
			synchronized (CheckSinaServlet.class) {
				try {
					RUNNING = true;
					// check user
					int usize = ALL_USER.size();
					for (int i = 0; i < Math.min(usize, USER_MAX); i++) {
						String u = ALL_USER.get(USER_REC);
						USER_REC++;
						if (USER_REC >= usize) {
							USER_REC = 0;
						}
						Weibo weibo = getWeibo(u, G_PWD);
						try {
							weibo.getUserTimeline();
							ERR_USER.remove(u);
						} catch (WeiboException e) {
							if (e.getMessage().indexOf("invalid weibo user") != -1) {
								ERR_USER.add(u);
							}
						}
					}

					// check host
					for (String h : ALL_HOST) {
						URL url = new URL(h);
						try {
							HttpURLConnection conn = (HttpURLConnection) url.openConnection();
							if (conn.getResponseCode() != 200) {
								ERR_HOST.add(h);
							} else {
								ERR_HOST.remove(h);
							}
						} catch (Exception e) {
							ERR_HOST.add(h);
						}
					}
					resp.getWriter().write("ok");
				} finally {
					RUNNING = false;
				}
			}
		}
	}
}
